file chooser dialog: Prevent uneven button heights
authorMatthias Clasen <mclasen@redhat.com>
Fri, 27 Feb 2015 02:15:19 +0000 (21:15 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 27 Feb 2015 02:17:06 +0000 (21:17 -0500)
The height of the text buttons depends on the font height,
whereas the search button has a fixed-size icon in it...
Prevent unevent heights by putting them all in a size group.

https://bugzilla.gnome.org/show_bug.cgi?id=745263

gtk/gtkfilechooserdialog.c
gtk/ui/gtkfilechooserdialog.ui

index 169e6a1bd43dc94661a1f42d4e4c4702c56407b1..29fbb48d5f88235e9d44997414c18fbc08c30656 100644 (file)
@@ -201,6 +201,8 @@ struct _GtkFileChooserDialogPrivate
 {
   GtkWidget *widget;
 
+  GtkSizeGroup *buttons;
+
   /* for use with GtkFileChooserEmbed */
   gboolean response_requested;
   gboolean search_setup;
@@ -256,6 +258,7 @@ gtk_file_chooser_dialog_class_init (GtkFileChooserDialogClass *class)
                                               "/org/gtk/libgtk/ui/gtkfilechooserdialog.ui");
 
   gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserDialog, widget);
+  gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserDialog, buttons);
   gtk_widget_class_bind_template_callback (widget_class, response_cb);
   gtk_widget_class_bind_template_callback (widget_class, file_chooser_widget_file_activated);
   gtk_widget_class_bind_template_callback (widget_class, file_chooser_widget_default_size_changed);
@@ -473,6 +476,15 @@ gtk_file_chooser_dialog_get_property (GObject         *object,
   g_object_get_property (G_OBJECT (priv->widget), pspec->name, value);
 }
 
+static void
+add_button (GtkWidget *button, gpointer data)
+{
+  GtkFileChooserDialog *dialog = data;
+
+  if (GTK_IS_BUTTON (button))
+    gtk_size_group_add_widget (dialog->priv->buttons, button);
+}
+
 static void
 setup_search (GtkFileChooserDialog *dialog)
 {
@@ -505,6 +517,8 @@ setup_search (GtkFileChooserDialog *dialog)
       g_object_bind_property (button, "active",
                               dialog->priv->widget, "search-mode",
                               G_BINDING_BIDIRECTIONAL);
+
+      gtk_container_forall (GTK_CONTAINER (header), add_button, dialog);
     }
 }
 
index fa0a3683adaca47cb9db5a75c85d42c67357fd64..281bd6f66fbbcf33e7efeadb94e6f62c06ad67ed 100644 (file)
@@ -53,4 +53,7 @@
       </object>
     </child>
   </template>
+  <object class="GtkSizeGroup" id="buttons">
+    <property name="mode">vertical</property>
+  </object>
 </interface>